/*
 * @Author: Qimu
 * @Date: 2020-04-25 06:40:21
 * @LastEditors: Qimu
 * @LastEditTime: 2020-06-29 22:22:51
 * @Description: file content
 * @FilePath: \vue-admin-koa2\vue-admin\src\store\index.js
 */
import Vue from 'vue'
import Vuex from 'vuex'
import utils from '@/plugins/utils'
import api from '@/request/api/index';//请求方法封装

Vue.use(Vuex)
export default new Vuex.Store({
  state: {
    userToken: utils.local.get('userToken') || '',//用户token
    menuList: utils.local.get('menuList') || [],//菜单栏
    breadcrumb: utils.session.get('breadcrumb') || [],//面包屑导航
    userInfo: utils.local.get('userInfo') || {},//用户信息
    activePath: utils.local.get('activePath') || '/index',//路由信息
    rolesList: utils.local.get('rolesList') || [],//角色列表
    adminList: utils.local.get('adminList') || [],//管理员列表
    articleCategoryList: utils.local.get('articleCategoryList') || [],//文章分类列表
  },
  mutations: {
    //用户token数据
    userToken: (state, data) => {
      state.userToken = data
      utils.local.set('userToken', data);
    },
    //用户token数据
    userInfo: (state, data) => {
      state.userInfo = data
      utils.local.set('userInfo', data);
    },
    //菜单列表数据
    menuList: (state, data) => {
      state.menuList = data
      utils.local.set('menuList', data);
    },
    //面包屑数据
    navName: (state, data) => {
      state.breadcrumb = data
      utils.session.set('breadcrumb', data);
    },
    //路由信息
    activePath: (state, data) => {
      state.activePath = data
      utils.local.set('activePath', data);
    },
    //角色列表
    rolesList: (state, data) => {
      state.rolesList = data
      utils.local.set('rolesList', data);
    },
    //管理员列表
    adminList: (state, data) => {
      state.adminList = data
      utils.local.set('adminList', data);
    },
    //文章分类列表
    articleCategoryList: (state, data) => {
      state.articleCategoryList = data
      utils.local.set('articleCategoryList', data);
    },
    // USER_SIGNOUT: (state) => {
    //   Object.key(state).foreach((k) => {
    //     Vue.delete(state, k);
    //   })
    // }
  },
  //getters只会依赖state中的成员去更新
  getters: {
    userInfo: (state) => state.userInfo,//用户列表
    menuList: (state) => state.menuList,//菜单栏
    breadcrumb: (state) => state.breadcrumb,//面包屑导航
    activePath: (state) => state.activePath,//路由信息
    rolesList: (state) => state.rolesList,//角色列表
    adminList: (state) => state.adminList,//管理员列表
    articleCategoryList: (state) => state.articleCategoryList,//文章分类列表
  },
  actions: {
    //菜单列表数据更新
    async getmenuList({ commit }) {
      const { data: res } = await api.author.menusList()
      if (res.meta.status !== 200) {
        this.$message.error({ message: res.meta.message })
      } else {
        commit('menuList', res.data);
      }
    },
    //角色列表数据更新
    async getrolesList({ commit }) {
      const { data: res } = await api.role.rolesList()
      if (res.meta.status !== 200) {
        this.$message.error({ message: res.meta.message })
      } else {
        commit('rolesList', res.data);
      }
    },
    //管理员列表数据更新
    async getadminList({ commit }) {
      const { data: res } = await api.admin.adminList()
      if (res.meta.status !== 200) {
        this.$message.error({ message: res.meta.message })
      } else {
        commit('adminList', res.data);
      }
    },
    //文章分类列表数据更新
    async getCategoryList({ commit }) {
      const { data: res } = await api.article.articleCategoryList()
      if (res.meta.status !== 200) {
        this.$message.error({ message: res.meta.message })
      } else {
        commit('articleCategoryList', res.data);
      }
    },

    //这里面的方法是用来异步触发mutations里面的方法,context与store 实例具有相同方法和属性
    // setGargetUser({ commit }, targetUser) {
    //   commit('userToken', targetUser);
    //   commit('menuList', targetUser);
    //   commit('menuname', targetUser);
    // },
  },
  modules: {}
})
